


#日志路径
LOGFILE=/root/access.log
#日志分析文件输出目录
OUTDIR=/opt
#日志开始日期
STARTDAY="20/Nov/2021"
#日志结束日期
ENDDAY="20/Nov/2021"




#以下无需修改
############################################################################
#样例：以空格分割：日期在第4列、URL在第7列、返回码在第9列、请求IP在最后一列
#11.11.11.11 - - [20/Nov/2021:00:01:42 +0800] "POST /work/ffing/s693/ HTTP/1.1" 200 187 "-" "-" "10.93.2.31"
#日期所在列
DATEF='$4'
#URL所在列
URLF='$7'
#返回码所在列
CODEF='$9'
#IP所在列
IPF='$NF'
#分析条目数量 
DISNUMBER=10


#创建输出目录
mkdir -p $OUTDIR
#转义
echo $STARTDAY|sed 's#/#\\/#g'|sed 's#-#/#g' > /tmp/name
FILESTARTDAY=`cat /tmp/name`
echo $ENDDAY  |sed 's#/#\\/#g'|sed 's#-#/#g' > /tmp/name
FILEENDDAY=`cat /tmp/name`


echo "请等待，正在进行日志分析 。。。"


LOGFILEALL=/tmp/logall
cat $LOGFILE |grep  "^[0-9]" | sed -n "/$FILESTARTDAY/,/$FILEENDDAY/p"  > /tmp/logall

LOGFILETMP=/tmp/logfiletmp
cat $LOGFILEALL |grep -E "BusinessService|EnterpriseService|BusinessServiceAIO|ChannelService|ClientUpgrade|BusinessManagementWeb|EnterpriseManagementWeb|BusinessManagement||EnterpriseManagement" > /tmp/logfiletmp




#获取第一天日期
SDAY=`cat $LOGFILEALL |awk '{print '$DATEF'}'|awk -F ":" '{print $1}'|awk -F "[" '{print $2}' |sort -u |head -1`


#获取最后一天日期
EDAY=`cat $LOGFILEALL |awk '{print '$DATEF'}'|awk -F ":" '{print $1}'|awk -F "[" '{print $2}' |sort -u |tail -1`

#请求量
PVSUM=`cat $LOGFILEALL |wc -l`

#统计天数
DAYSUN=`cat $LOGFILEALL |awk '{print '$DATEF'}' |awk -F "[" '{print $2}'|awk -F":" '{print $1}'|sort|uniq |wc -l`

#平台每天访问量
AVGPV=`awk 'BEGIN {print '$PVSUM'/'$DAYSUN'}'`


#访问量最高的 $DISNUMBER 天
MAXPVDAY=`cat $LOGFILETMP |awk '{print '$DATEF'}' |awk -F "[" '{print $2}'|awk -F":" '{print $1}'|sort |uniq -c |sort -nr|head -n $DISNUMBER`


#请求URL最多的 $DISNUMBER 条
MAXPVURL=`cat $LOGFILETMP |awk '{print '$URLF'}' |sort|uniq -c|sort -nr|head -n $DISNUMBER`




echo "-------------------------------------------------------------------------------------------------" 
echo "$SDAY 到 $EDAY :共 $DAYSUN 天           访问量：$PVSUM        平均每天访问量：$AVGPV           " 
echo "-------------------------------------------------------------------------------------------------" 
echo " 访问量最高的日期：（默认展示最高$DISNUMBER 天）" 
echo "$MAXPVDAY" 
echo " 请求最高的URL：（默认展示最高$DISNUMBER 条）"
echo "$MAXPVURL"
echo "-------------------------------------------------------------------------------------------------" 


##############数据分析

###分析日志完成后，存放路径
#获取日志文件名称
FILENAME=`echo $LOGFILE|awk -F "/" '{print $NF}'`
LINE=_DA_
NOWDATE=`date +%F_%T`
DISPATH=$OUTDIR/$FILENAME$LINE$NOWDATE

#追加到日志
echo "-------------------------------------------------------------------------------------------------" >>$DISPATH
echo "$SDAY 到 $EDAY :共 $DAYSUN 天           访问量：$PVSUM        平均每天访问量：$AVGPV           " >>$DISPATH
echo "-------------------------------------------------------------------------------------------------" >>$DISPATH
echo " 访问量最高的日期：（默认展示最高$DISNUMBER 天）" >>$DISPATH
echo "$MAXPVDAY" >>$DISPATH
echo " 请求最高的URL：（默认展示最高$DISNUMBER 条）" >>$DISPATH
echo "$MAXPVURL" >>$DISPATH
echo "-------------------------------------------------------------------------------------------------" >>$DISPATH



#按天分析
echo "按天分析，默认分析最高$DISNUMBER 天"
#访问量最多的 $DISNUMBER 天导入LOGDAY
LOGDAY="/tmp/logday"
cat $LOGFILETMP |awk '{print '$DATEF'}' |awk -F "[" '{print $2}'|awk -F":" '{print $1}'|sort |uniq -c|sort -nr|awk '{print $2}'|head -n $DISNUMBER > $LOGDAY

for i in `cat $LOGDAY `
do


ONEDAY=`echo "$i" `
echo "正在分析：$ONEDAY"

#分割日志
LOGFOR=/tmp/logfor
cat $LOGFILETMP |grep $ONEDAY  > $LOGFOR


#一天的并请求量
ONEDAYPV=`cat $LOGFILETMP |grep $ONEDAY |wc -l`
#信息导出到/tmp/log1
echo "$ONEDAY 当天请求量为：$ONEDAYPV " >>$DISPATH
#访问量最高小时段
echo "访问量最高小时段：" >>$DISPATH
cat $LOGFOR |grep "$ONEDAY" |awk '{print $DATEF}'|awk -F "[" '{print $2}'|awk -F":" '{print $1 ":" $2}'|sort|uniq -c|sort -nr|head -n $DISNUMBER >>$DISPATH
#访问量最高分钟段
echo "访问量最高分钟段：" >>$DISPATH
cat $LOGFOR |grep "$ONEDAY" |awk '{print $DATEF}'|awk -F "[" '{print $2}'|awk -F":" '{print $1 ":" $2 ":" $3}'|sort|uniq -c|sort -nr|head -n $DISNUMBER >>$DISPATH
#访问量最高秒段
echo "访问量最高秒时间段：" >>$DISPATH
cat $LOGFOR |grep "$ONEDAY" |awk '{print $DATEF}'|awk -F "[" '{print $2}'|awk -F":" '{print $1 ":" $2 ":" $3 ":" $4}'|awk '{print $1}'|sort|uniq -c|sort -nr|head -n $DISNUMBER >>$DISPATH
#一天的IP统计
echo "访问最高IP统计:" >>$DISPATH
cat $LOGFOR |grep "$ONEDAY" |awk '{print '$IPF'}'|sort |uniq -c |sort -nr |head -n $DISNUMBER >>$DISPATH
#一天的URL最高 $DISNUMBER 
echo "访问量最高Url统计:"  >>$DISPATH
cat $LOGFOR |grep "$ONEDAY" |awk '{print '$URLF'}' |sort|uniq -c|sort -nr |head -n $DISNUMBER >>$DISPATH
#一天code统计
echo "返回最多Code统计:"  >>$DISPATH
cat $LOGFOR |grep "$ONEDAY" |awk '{print '$CODEF'}' |sort|uniq -c|sort -nr|head -n $DISNUMBER >>$DISPATH
#结束
echo "#########################################################################################" >>$DISPATH
done

###########

echo "==\/==\/==\/==\/==\/==\/==\/   以下分析：按URL请求量   \/==\/==\/==\/==\/==\/==\/" >>$DISPATH
#按URL分析

echo "按URL请求量排序，默认分析最高$DISNUMBER 个URL"
#请求最多的URL $DISNUMBER 个导入LOGURL
LOGURL=/tmp/logurl
cat $LOGFILETMP |awk '{print '$URLF'}' |sort|uniq -c |sort -nr |awk '{print $2}'|head -n $DISNUMBER > $LOGURL


for i in `cat $LOGURL `
do

ONEURL=`echo $i `
echo "正在分析 :$ONEURL"

#分割日志
LOGFOR=/tmp/logfor
cat $LOGFILETMP |grep $ONEURL  > $LOGFOR


#总请求次数
ONEURLPV=`cat $LOGFILETMP |grep "$ONEURL" |wc -l`
echo "$ONEURL 总调用次数：$ONEURLPV"  >>$DISPATH

#请求最高的日期段
echo  "请求最多日期段："  >>$DISPATH
cat $LOGFOR |grep "$ONEURL" |awk '{print '$DATEF'}'|awk -F "[" '{print $2}'|awk -F":" '{print $1 }'|sort|uniq -c|sort -nr|head -n $DISNUMBER >>$DISPATH


#请求最高的小时段
echo  "请求最多小时段："  >>$DISPATH
cat $LOGFOR |grep "$ONEURL" |awk '{print '$DATEF'}'|awk -F "[" '{print $2}'|awk -F":" '{print $1 ":" $2}'|sort|uniq -c|sort -nr|head -n $DISNUMBER >>$DISPATH

#请求最高的分钟段
echo  "请求最多分钟段："  >>$DISPATH
cat $LOGFOR |grep "$ONEURL" |awk '{print '$DATEF'}'|awk -F "[" '{print $2}'|awk -F":" '{print $1 ":" $2 ":" $3 }'|sort|uniq -c|sort -nr|head -n $DISNUMBER >>$DISPATH

#请求最高秒时间段
echo  "请求最多秒时间段："  >>$DISPATH
cat $LOGFOR |grep "$ONEURL" |awk '{print '$DATEF'}'|awk -F "[" '{print $2}'|awk -F":" '{print $1 ":" $2 ":" $3 ":" $4}'|awk '{print $1}'|sort|uniq -c|sort -nr|head -n $DISNUMBER >>$DISPATH



#请求最多的IP
echo  "请求最多IP："  >>$DISPATH
cat $LOGFOR |grep "$ONEURL"|awk '{print '$IPF'}' |awk -F \" '{print $2}'|sort|uniq -c|sort -nr |head -n $DISNUMBER >>$DISPATH

#返回码最多的
echo  "最多返回码："  >>$DISPATH
cat $LOGFOR |grep "$ONEURL"|awk '{print '$CODEF'}' |sort|uniq -c|sort -nr|head -n $DISNUMBER >>$DISPATH

echo "===========================================================================================" >>$DISPATH


done





#当前时间

echo "已完成，日志分析文件路径： $DISPATH"
